package mvc.handlers;

import entity.PianoStudio;
import entity.PianoStudioPK;
import facade.PianoStudioFacadeRemote;
import session.EditPianoLocal;
import session.ListaEsamiLocal;
import util.InterfaceUtente;

import mvc.framework.*;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 * Handler per gestire l'azione di visualizzazione del profilo di un utente
 * 
 * @author Grillo
 */
public class AddEsameHandler extends AbsRequestHandler {

    //costanti di errore
    public final static int ERR_LOGIN = 1;
    public final static int ERR_ALREADY_SELECTED = 2;

    private final static String ACTION_NAME = "addEsame";

    public AddEsameHandler(DialogHandler dHandler) {
        super(dHandler);

        //Aggiungo la descrizione degli errori
        errors.add("L'azione richiesta necessita di essere collegati e avere le autorizzazioni necessarie");
        errors.add("L'esame scelto è già presente nel carico didattico");
    }

    public String getActionName() {
        return ACTION_NAME;
    }
    
    public void setNextPage() {
        nextPage = "/views/listaEsami.jsp";
    }
    
    public int validate() {
        Integer idEsame = dialogHandler.getParameter("id")!=null ? Integer.parseInt(dialogHandler.getParameter("id")) : 0;
        PianoStudioFacadeRemote pianoFacade = null;

        if(SessionManager.getAttribute(dialogHandler.getSession(), "tipo_utente")==null || !SessionManager.getAttribute(dialogHandler.getSession(), "tipo_utente").equals("STUDENTE")) {
            nextPage = "/views/home.jsp";
            return ERR_LOGIN;
        }

        //Bind agli EJB
        try {
            Context c = new InitialContext();
            pianoFacade = (PianoStudioFacadeRemote) c.lookup("facade.PianoStudioFacadeRemote");
        } catch (NamingException ne) {}

        Integer matricola = ((InterfaceUtente)SessionManager.getAttribute(dialogHandler.getSession(), "utente")).getMatricola();
        PianoStudio piano = pianoFacade.find(new PianoStudioPK(matricola, idEsame));
        if(piano != null)
            return ERR_ALREADY_SELECTED;
        else
            return SUCCESS;
    }

    public int execute() {
        Integer idEsame = dialogHandler.getParameter("id")!=null ? Integer.parseInt(dialogHandler.getParameter("id")) : 0;
        Integer matricola = ((InterfaceUtente)SessionManager.getAttribute(dialogHandler.getSession(), "utente")).getMatricola();
        EditPianoLocal addBean = null;
        ListaEsamiLocal esamiBean = null;

        //Bind agli EJB
        try {
            Context c = new InitialContext();
            addBean = (EditPianoLocal) c.lookup("java:comp/env/EditPianoBean");
            esamiBean = (ListaEsamiLocal) c.lookup("java:comp/env/ListaEsamiBean");
        } catch (NamingException ne) {}

        addBean.addEsame(matricola, idEsame);
        
        SessionManager.setConfirmMessage(dialogHandler.getSession(), "Inserimento avvenuto con successo");
        SessionManager.setAttribute(dialogHandler.getSession(), "listaEsami", esamiBean.getListaEsamiByMatricola(matricola, "st"));
        nextPage = nextPage + "?matricola=" + matricola + "user=st";
        
        return SUCCESS;
    }

    @Override
    public IRequestHandler clone(DialogHandler dHandler) throws CloneNotSupportedException {
        return new AddEsameHandler(dHandler);
    }
}